﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Twi.COMMON.Core
{
    /*
     * CopyRight:©2010-2011 Twilight软件开发工作室版权所有
     * Author:xuzhihong
     * Create Date: 2011-02-28
     * Description: 获取拼音首字母,返回“*”表示未知，当输入非中文汉字的时候，返回未知（*）
     */



    public class FirstLetter
    {
        /// <summary>
        /// 获取字符串的拼音首字母
        /// </summary>
        /// <param name="str">中文字符串</param>
        /// <returns>首字母字符串(大写)</returns>
        public static string GetFirstLetters(string str)
        {
            char[] charArray = str.ToCharArray();
            string pyStr = "";
            foreach (var c in str)
            {
                pyStr += GetSingleFirstLetter(c.ToString());
            }
            return pyStr.ToUpper();
        }

        /// <summary>
        /// 获取单个汉字的拼音首字母
        /// </summary>
        /// <param name="str">单个中文字</param>
        /// <returns>首字母</returns>
        private static string GetSingleFirstLetter(string str)
        {
            byte[] array = System.Text.Encoding.Default.GetBytes(str);
            try
            {
                int i = (short)(array[0]) * 256 + ((short)(array[1]));
                if (i < 0xB0A1)
                    return "*";
                if (i < 0xB0C5)
                    return "a";
                if (i < 0xB2C1)
                    return "b";
                if (i < 0xB4EE)
                    return "c";
                if (i < 0xB6EA)
                    return "d";
                if (i < 0xB7A2)
                    return "e";
                if (i < 0xB8C1)
                    return "f";
                if (i < 0xB9FE)
                    return "g";
                if (i < 0xBBF7)
                    return "h";
                if (i < 0xBFA6)
                    return "g";
                if (i < 0xC0AC)
                    return "k";
                if (i < 0xC2E8)
                    return "l";
                if (i < 0xC4C3)
                    return "m";
                if (i < 0xC5B6)
                    return "n";
                if (i < 0xC5BE)
                    return "o";
                if (i < 0xC6DA)
                    return "p";
                if (i < 0xC8BB)
                    return "q";
                if (i < 0xC8F6)
                    return "r";
                if (i < 0xCBFA)
                    return "s";
                if (i < 0xCDDA)
                    return "t";
                if (i < 0xCEF4)
                    return "w";
                if (i < 0xD1B9)
                    return "x";
                if (i < 0xD4D1)
                    return "y";
                if (i < 0xD7FA)
                    return "z";
                return "* ";

            }
            catch
            {
                return "* ";
            } 
        }
    }
}
